import { Ref } from 'vue';
import { duplicateCheckDelay,getAllRolesListNoByTenant } from '/@/views/system/user/user.api';
import { BasicColumn, FormSchema } from '/@/components/Table';
import { DescItem } from '/@/components/Description';
import { findTree } from '/@/utils/common/compUtils';
import dayjs from 'dayjs';
// 用户信息 columns
export const userInfoColumns: BasicColumn[] = [
  {
    title: '用户账号',
    dataIndex: 'username',
    width: 120,
  },
  {
    title: '用户姓名',
    dataIndex: 'realname',
    width: 100,
  },
  {
    title: '性别',
    dataIndex: 'sex',
    width: 80,
    sorter: true,
    customRender: ({ text }) => {
      return text === 1 ? '男' : '女' ;
    },
  },
  {
    title: '出生年月',
    dataIndex: 'birthday',
    width: 100,
  },
  {
    title: '职务',
    dataIndex: 'userDepartPositionVoList',
    width: 100,
    customRender: ({ record }) => {
      console.log(record);
      const positionList = record.userDepartPositionVoList || [];
      // 初始化 `record.post` 为空数组
      record.post = [];
      const depIdIsLeaf = record.depIdIsLeaf; // 假设这是你用于判断的字段
  
      // 筛选出匹配 `selectedDepartId` 的职务
      const matchingPositions = positionList.filter(
        (position) => position.departId === record.selectedDepartId
      );
  
      if (matchingPositions.length > 0) {
        // 如果有匹配的，将匹配的 `positionId` 添加到 `record.post` 中
        matchingPositions.forEach((pos) => (record.post = pos.positionId));
        // 返回匹配的职务名称
        return matchingPositions.map((pos) => pos.positionName).join(', ');
      } else {
        if (depIdIsLeaf) {
          // 如果 depIdIsLeaf 为 true 且没有匹配的职务，则返回空
          return '';
        } else {
          // 否则，将所有 `positionId` 添加到 `record.post` 中
          positionList.forEach((pos) => record.post.push(pos.positionId));
          // 返回所有职务名称
          return positionList.map((pos) => pos.positionName).join(', ');
        }
      }
    },
  },
  // {
  //   title: '职务',
  //   dataIndex: 'userDepartPositionVoList',
  //   width: 100,
  //   customRender: ({ record }) => {
  //     console.log(record)
  //     const positionList = record.userDepartPositionVoList || [];
  //     // 初始化 `record.post` 为空数组
  //     record.post = [];
  //     // 筛选出匹配 `selectedDepartId` 的职务 izBindThird
  //     const matchingPositions = positionList.filter(
  //       (position) => position.departId === record.selectedDepartId
  //     );
      
  //     if (matchingPositions.length > 0) {
  //       // 如果有匹配的，将匹配的 `positionId` 添加到 `record.post` 中
  //       matchingPositions.forEach((pos) => record.post=pos.positionId);
  //       // 返回匹配的职务名称
  //       return matchingPositions.map((pos) => pos.positionName).join(', ');
  //     } else {
  //       // 如果没有匹配的，将所有 `positionId` 添加到 `record.post` 中
  //       positionList.forEach((pos) => record.post.push(pos.positionId));
  //       // 返回所有职务名称positionList.map((pos) => pos.positionName).join(', ');
  //       return positionList.map((pos) => pos.positionName).join(', ');
  //     }
  //   },
  // },
  {
    title: '任职时间',
    dataIndex: 'tenure',
    width: 100,
    customRender: ({ text }) => {
      return text ? dayjs(text).format('YYYY-MM-DD') : '';
    },
  },
  {
    title: '聘任时间',
    dataIndex: 'hiringTime',
    width: 100,
    customRender: ({ text }) => {
      return text ? dayjs(text).format('YYYY-MM-DD') : '';
    },
  },
  {
    title: '是否党员',
    dataIndex: 'cpc',
    width: 80,
    customRender: ({ text }) => {
      return text === 1 ? '是' : text === 2 ? '否' : '';
    },
  },
];

// 用户信息查询条件表单
export const userInfoSearchFormSchema: FormSchema[] = [
  {
    field: 'keyWord',
    label: '用户账号',
    component: 'Input',
  }
];

// 部门角色 columns
export const departRoleColumns: BasicColumn[] = [
  {
    title: '部门角色名称',
    dataIndex: 'roleName',
    width: 100,
  },
  {
    title: '部门角色编码',
    dataIndex: 'roleCode',
    width: 100,
  },
  {
    title: '部门',
    dataIndex: 'departId_dictText',
    width: 100,
  },
  {
    title: '备注',
    dataIndex: 'description',
    width: 100,
  },
];

// 部门角色查询条件表单
export const departRoleSearchFormSchema: FormSchema[] = [
  {
    field: 'roleName',
    label: '部门角色名称',
    component: 'Input',
  },
];

// 部门角色弹窗form表单
export const departRoleModalFormSchema: FormSchema[] = [
  {
    label: 'id',
    field: 'id',
    component: 'Input',
    show: false,
  },
  {
    field: 'roleName',
    label: '部门角色名称',
    component: 'Input',
    rules: [
      { required: true, message: '部门角色名称不能为空！' },
      { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' },
    ],
  },
  {
    field: 'roleCode',
    label: '部门角色编码',
    component: 'Input',
    dynamicDisabled: ({ values }) => {
      return !!values.id;
    },
    dynamicRules: ({ model }) => {
      return [
        { required: true, message: '部门角色编码不能为空！' },
        { min: 0, max: 64, message: '长度不能超过 64 个字符', trigger: 'blur' },
        {
          validator: (_, value) => {
            if (/[\u4E00-\u9FA5]/g.test(value)) {
              return Promise.reject('部门角色编码不可输入汉字！');
            }
            return new Promise((resolve, reject) => {
              let params = {
                tableName: 'sys_depart_role',
                fieldName: 'role_code',
                fieldVal: value,
                dataId: model.id,
              };
              duplicateCheckDelay(params)
                .then((res) => {
                  res.success ? resolve() : reject(res.message || '校验失败');
                })
                .catch((err) => {
                  reject(err.message || '验证失败');
                });
            });
          },
        },
      ];
    },
  },
  {
    field: 'description',
    label: '描述',
    component: 'Input',
    rules: [{ min: 0, max: 126, message: '长度不能超过 126 个字符', trigger: 'blur' }],
  },
];

// 基本信息form
export function useBaseInfoForm(treeData: Ref<any[]>) {
  const descItems: DescItem[] = [
    {
      field: 'departName',
      label: '机构名称',
    },
    {
      field: 'parentId',
      label: '上级部门',
      render(val) {
        if (val) {
          let data = findTree(treeData.value, (item) => item.key == val);
          return data?.title ?? val;
        }
        return val;
      },
    },
    {
      field: 'orgCode',
      label: '机构编码',
    },
    {
      field: 'orgCategory',
      label: '机构类型',
      render(val) {
        if (val === '1') {
          return '公司';
        } else if (val === '2') {
          return '部门';
        } else if (val === '3') {
          return '岗位';
        }
        return val;
      },
    },
    {
      field: 'departOrder',
      label: '排序',
    },

    {
      field: 'mobile',
      label: '手机号',
    },
    {
      field: 'address',
      label: '地址',
    },
    {
      field: 'memo',
      label: '备注',
    },
  ];

  return { descItems };
}
